#ifndef _ODN_SCENE_COLLIDER_H
#define _ODN_SCENE_COLLIDER_H

#include "odn_phys_PhysicsModel.h"

namespace ouden
{
	namespace physics
	{
		
		//Base collider class 
		class ODN_Collider
		{
			
		public:
			
			ODN_Collider(ODN_PhysicsModel* Parent, int ID) : parentobject(Parent), id(ID)		{}
			~ODN_Collider()		{}
			
			int getID()						{ return id; }
			bool hasPhysicalResponse()		{ return physicalresponse; }
			ODN_PhysicsModel* getParent()	{ return parentobject; }
			
		protected:
			
			//Identification number so that colliders for different parts of an object can be identified 
			int id;
			
			//Indicates whether the collider will act as a physical object and physically collide with other physical colliders or whether it will act simply as a sensor
			bool physicalresponse;
			
			//Pointer to the parent object of this collider 
			ODN_PhysicsModel* parentobject; 
			
		};
		
		//A circular collider with a point and a radius 
		class ODN_CircleCollider : public ODN_Collider 
		{
		
		public:
			
			ODN_CircleCollider()		{}
			ODN_CircleCollider(ODN_Point* Point, float Radius) : point(Point), radius(Radius)		{}
			~ODN_CircleCollider()		{}
			
		private:
			
			ODN_Point* point; 
			float radius; 
			
		};
		
		//A line collider with two points and a width or thickness 
		class ODN_LineCollider : public ODN_Collider 
		{
			
		public:
			
			//TODO: Constructor 
			
		private:
			
			ODN_Point* points[2]; 
			float width; 
			
		};
		
	} //namespace physics 
} //namespace ouden 

#endif //_ODN_SCENE_COLLIDER_H 
